home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Night Owl 6
/
Night Owl's Shareware - PDSI-006 - Night Owl Corp (1990).iso
/
038a
/
aplibs91.zip
/
NEW-U.BAS
< prev
next >
Wrap
BASIC Source File
|
1991-07-16
|
9KB
|
319 lines
'==============================================================================
' ALL-PURPOSE LIBRARY
' NEW-U.BAS
'==============================================================================
' -- Spring 1991
' H Ballinger
$COMPILE UNIT
$ERROR ALL ON
$OPTION CNTLBREAK ON
DEFINT A-Z
EXTERNAL Escapable, UsingButtons, TopOfButtons, Buttons%, ButtonMsg$ ()
EXTERNAL UsePgDn, UsePgUp, LastSD ()
DECLARE SUB Marker (string)
DECLARE SUB SCREENPUSH ()
DECLARE SUB SCREENPOP ()
DECLARE SUB QBox (integer,integer,integer,string,integer)
DECLARE SUB PressAKey ()
DECLARE SUB SUPERMENU (string array,integer,integer,integer,string,integer)
%False = 0
%True = NOT %False
%No = %False
%Yes = NOT %No
' MENU RETURN CODES (KEY PRESSED.)
%CR = 0: %Esc = &H20: %F1 = &H100: %F2 = &H200
%PgUp = &H400: %PgDn = &H600
%RArrow = &H800: %LArrow = &HA00
' ----------------------------------------------------------------------------
FUNCTION ButtonIsClick (L, C) PUBLIC
SHARED Buttons%
LOCAL BClick
IF L >= TopOfButtons AND L < TopOfButtons + 5 THEN
SELECT CASE C
CASE < 2
EXIT SELECT
CASE < 16
BClick = 1
EXIT SELECT
CASE < 18
EXIT SELECT
CASE < 32
BClick = 2
EXIT SELECT
CASE < 34
EXIT SELECT
CASE < 48
BClick = 3
EXIT SELECT
CASE < 50
EXIT SELECT
CASE < 64
BClick = 4
EXIT SELECT
CASE < 66
EXIT SELECT
CASE < 80
BClick = 5
END SELECT
IF BClick > Buttons% THEN
ButtonIsClick = 0
ELSE
ButtonIsClick = BClick
END IF
ELSE
ButtonIsClick = 0
END IF
END FUNCTION
SUB ButtonButton PUBLIC SHARED
LOCAL BMask$, L, B
LOCATE TopOfButtons, 1, 0
PRINT LEFT$_
(" ┌────────────╖ ┌────────────╖ ┌────────────╖ ┌────────────╖ ┌────────────╖ ",_
Buttons% * 16)
BMask$ = " │ \ \ ║ "
FOR L = 1 TO 3
FOR B = 1 TO Buttons%
PRINT USING BMask$; ButtonMsg$ (B, L);
NEXT
PRINT
NEXT
PRINT LEFT$_
(" ╘════════════╝ ╘════════════╝ ╘════════════╝ ╘════════════╝ ╘════════════╝ ",_
Buttons% * 16);
END SUB ' --------------------------- REM ButtonButton
' ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
FUNCTION PICKAFILE$ (D2Use$) PUBLIC
%FilesMaxInDir = 300
LOCAL T$ ()
D2Use$ = RTRIM$ (D2Use$, "\")
DO
REDIM DYNAMIC T$ (1:%FilesMaxInDir)
J = 1
T$ (J) = " " + DIR$ (D2Use$+"\") + " " + CHR$(255)
IF T$ (J) = " " + CHR$(255) THEN DECR J
DO
INCR J
T$ (J) = " " + DIR$ + " " + CHR$(255)
IF T$ (J) = " " + CHR$(255) THEN DECR J: EXIT LOOP
IF J = %FilesMaxInDir THEN
CALL SCREENPUSH
CALL QBox (%Center, %Center, 1 ,"THERE ARE OVER "_
+ STR$(%FilesMaxInDir) + " FILES HERE. THEY CAN'T ALL BE SHOWN.", 0)
CALL PressAKey
EXIT LOOP
END IF
LOOP
NumFiles = J
CALL QBox (8, 3, 1, STR$ (J) + " Files found", 0)
IF J > 0 THEN
ARRAY SORT T$() FOR NumFiles
CALL MegaMenu (T$(), NumFiles, Choice, ItemChosen$)
IF ItemChosen$ = "" THEN PickAFile$ = "": ERASE T$: EXIT FUNCTION
ItemChosen$ = RTRIM$ (ItemChosen$, ANY " "+CHR$(255))
ItemChosen$ = D2Use$ + "\" + LTRIM$ (ItemChosen$)
PICKAFILE$ = ItemChosen$
ERASE T$
EXIT LOOP
ELSE
EXIT LOOP
END IF
LOOP
END FUNCTION ' PICKAFILE$
SUB MegaMenu (Foo$(), Choices%, Choice, ItemChosen$) PUBLIC
CALL SCREENPUSH
DIM DYNAMIC M$ (1:23)
MenuPage = 1
C = 1
DO
FOR I = 1 TO 22
IF (MenuPage - 1) * 22 + I > Choices% THEN
M$ (I) = "END"
ELSE
M$ (I) = Foo$ ((MenuPage - 1) * 22 + I)
END IF
NEXT
M$ (23) = "END"
MenuPages = FIX (Choices% / 22) + 1
IF MenuPages > 1 THEN Title$ = "PgUp/Pg-Dn for more"
IF MenuPage > 1 THEN UsePgUp = %Yes
IF MenuPage < MenuPages THEN UsePgDn = %Yes
MRt = MenuPages * -1
CALL SUPERMENU (M$(), MRt + 2*MenuPage - 1, 30, C, Title$, Ky%)
SELECT CASE Ky%
CASE %PgUp
DECR MenuPage
C = 22
CASE %PgDn
INCR MenuPage
C = 1
'' CASE %F1
'' GOSUB MenuHelpScrn
END SELECT
LOOP UNTIL Ky% = %Esc OR Ky% = %CR
Choice = C
IF Ky% = %Esc THEN
ItemChosen$ = "": Choice = 0
ELSE
ItemChosen$ = MID$ (M$ (Choice), 3)
END IF
CALL SCREENPOP
END SUB ' MegaMenu
' ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
FUNCTION PICKADIR$ PUBLIC
%DirAttr = 16
DIM DYNAMIC SDList$ (1024)
IF DIR$ ("PICKADIR.LST") = "" THEN
CALL SCREENPUSH
CALL QBox (4,0,1," SUBDIR SNIFFER",0)
CALL LISTSUBDIR (SDList$ (), SD%)
OutFil = FREEFILE
OPEN "PICKADIR.LST" FOR OUTPUT AS OutFil
PRINT "WRITING"; SD%; " ITEMS";
FOR M = 0 TO SD%-1
PRINT #OutFil, SDList$ (M)
NEXT
CLOSE OutFil
ARRAY INSERT SDList$ (), ""
CALL SCREENPOP
ELSE
InFil = FREEFILE
OPEN "PICKADIR.LST" FOR INPUT AS InFil
M = 1
DO WHILE NOT EOF (InFil)
LINE INPUT #InFil, SDList$ (M)
INCR M
LOOP
CLOSE OutFil
SD% = M - 1
END IF
CALL MegaMenu (SDList$(), SD%, Choice, ItemChosen$)
IF ItemChosen$ = "" THEN PICKADIR$ = "": ERASE SDList$: EXIT FUNCTION
PICKADIR$ = ItemChosen$
ERASE SDList$
END FUNCTION ' PICKADIR$
' $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
SUB LISTSUBDIR (SDL$ (), DirCt) PUBLIC ' Obtains all directory and subdirectory
' names on the current drive; adds the
' root plus "A:\" & "B:\" and returns how
' many there are ("DirCt") and array,
' SDL$ (0 .. DirCt) with their names in it.
' Pressing ESC aborts sub with DirCt = 0.
LOCAL Dr$(), PrevLevel, Ct, M
SHARED SDFound, Level, NoI, EscPressed
DIM DYNAMIC Dr$ (30, 40)
EscPressed = %False
SDFound =0
Level = 0
NoI = 0
Drv$ = GetCurrentDrive$
CALL LoadSD$ ("", Dr$()) ' load SD list for Level 0 (Root --
' parameter of DIR$ will be "" + "\")
IF EscPressed THEN DirCt = 0: EXIT SUB
INCR Level
NoI = 0
DO
SDFound = %False
PrevLevel = Level - 1
LOCATE 12,1: PRINT STRING$ (80,205)
LOCATE 13,1: PRINT SPACE$ (80);
LOCATE 14,1: PRINT STRING$ (80,205)
FOR Ct = 0 TO LastSD (PrevLevel)
S$ = Dr$ (PrevLevel, Ct)
LOCATE 13,17: PRINT "SUBSNIFF SEARCHING "; S$; " ON LEVEL "; Level; " "
CALL LoadSD$ (S$, Dr$()) ' load for Level
IF EscPressed THEN ' using each previous-level dirname
DirCt = 0
DO: LOOP UNTIL INKEY$ = ""
EXIT SUB
END IF
NEXT Ct ' and check for escape key press
INCR Level: NoI = 0
LOOP UNTIL SDFound = %False
LastLevel = Level - 1
DirCt = 0
FOR Level = 0 TO LastLevel
FOR Ct = 0 TO LastSD (Level)
SDL$ (DirCt) = " " + Drv$ + Dr$ (Level, Ct)
INCR DirCt
NEXT
NEXT
SDL$ (DirCt) = " C:\": INCR DirCt
SDL$ (DirCt) = " A:\": INCR DirCt
SDL$ (DirCt) = " B:\": INCR DirCt
ARRAY SORT SDL$() FOR DirCt
END SUB
SUB LoadSD (S$, Dr$())
LOCAL A%
SHARED SDFound, Level, NoI, EscPressed
X$ = DIR$ (S$+"\" , %DirAttr)
DO WHILE X$ <> ""
A% = ATTRIB (S$ + "\" + X$) MOD 32
IF A% = %DirAttr THEN
Dr$ (Level, NoI) = S$ + "\" +X$
SDFound = %True
INCR NoI
END IF
IF INKEY$ = CHR$ (27) THEN EscPressed = %True: EXIT LOOP
X$ = DIR$
LOOP UNTIL X$ = ""
LastSD (Level) = NoI - 1
END SUB
SUB ClockIcon PUBLIC
LOCAL L, C
L = CSRLIN: C = POS
LOCATE 16,1
PRINT " ┌─────────────┐"
PRINT " │ │ │"
PRINT " │ │ │"
PRINT " │ ∙─── │"
PRINT " │ │"
PRINT " │ │"
PRINT " └─────────────┘";
LOCATE L, C
END SUB